package com.itheima.provider;

import cn.hutool.core.collection.CollectionUtil;
import com.alibaba.dubbo.config.annotation.Service;
import com.github.pagehelper.Page;
import com.github.pagehelper.PageHelper;
import com.itheima.common.entity.PageResult;
import com.itheima.common.entity.QueryPageBean;
import com.itheima.mapper.CheckGroupDao;
import com.itheima.pojo.CheckGroup;
import com.itheima.pojo.CheckIteAndCheckGroupAndCheckItemIds;
import com.itheima.pojo.CheckItem;
import com.itheima.service.CheckGroupService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.transaction.annotation.Transactional;

import java.util.List;

/**
 * @author 司军强
 * @version 1.0.0
 * @date 2019/7/19 :11:56
 * @description
 **/

@Service(interfaceClass = CheckGroupService.class)
@Transactional
public class CheckGroupServiceImpl implements CheckGroupService {

    //属性注入dao层的依赖
    @Autowired
    private CheckGroupDao checkGroupDao;


    //添加的方法
    @Override
    public void add(CheckGroup checkGroup, List<Integer> checkitemIds) {
        //保存检查组的信息 并主键回显
        checkGroupDao.add(checkGroup);
        //获取checkGroup 主键的id
        Integer checkGroupId = checkGroup.getId();
        //循环保存检查项和检查组的关系
        //使用工具类判断 checkItem 是否为空
        if (CollectionUtil.isNotEmpty(checkitemIds)) {
            //遍历这个集合 获取所有的勾选给的id 目的是 插入中间表 建立关系
            for (Integer checkitemId : checkitemIds) {
                checkGroupDao.setCheckGroupIdAndCheckitemIds(checkitemId, checkGroupId);
            }

        }


    }

    //数据回显
    @Override
    public List<CheckGroup> findAll() {

        return checkGroupDao.findAll();


    }


    //分页查询
    @Override
    public PageResult findPage(QueryPageBean queryPageBean) {
        //使用分页插件  传入当前页和 每页显示的条数 返回的是个对象
        Page page = PageHelper.startPage(queryPageBean.getCurrentPage(), queryPageBean.getPageSize());

        //根据条件查询
        List<CheckGroup> checkGroupList = checkGroupDao.findPage(queryPageBean.getQueryString());
        return new PageResult(page.getTotal(), checkGroupList);


    }

    //数据回显
    @Override
    public CheckIteAndCheckGroupAndCheckItemIds findAllById(Integer id) {
        //定义一个对象 封装所有的的数据
        CheckIteAndCheckGroupAndCheckItemIds ck = new CheckIteAndCheckGroupAndCheckItemIds();
        //先去查询检查组基本的数据信息
        CheckGroup checkGroup = checkGroupDao.findCheckGroupById(id);
        ck.setCheckGroup(checkGroup);
        //再去查询所有的检查项信息
        List<CheckItem> checkItemList = checkGroupDao.findAllCheckItem();
        ck.setCheckItem(checkItemList);
        //最后去中间表查询 检查项的id
        List<Integer> integerList = checkGroupDao.findAllIdCheckItemId(id);
        ck.setCheckitemIds(integerList);
        //将所有的结果封装到对象中一起返回
        return ck;


    }


    //修改检查组表中的数据
    @Override
    public void setEdit(CheckGroup checkGroup) {

        //获取检查组的id 进行传递
        Integer checkGroupId = checkGroup.getId();

        //先修改检查组的基本信息 根据id
        checkGroupDao.setCheckGroupById(checkGroup);

        //获取所有的检查项id
        List<Integer> checkitemIdList = checkGroup.getCheckitemIds();


        //根据检查组的id 删除中间表关系
        checkGroupDao.deleteCheckGroupIdAndCheckitemIdByCheckGroupById( checkGroupId);


            //添加 检查项 和检查组的关系
        if(CollectionUtil.isNotEmpty(checkitemIdList)){
            for (Integer integerId : checkitemIdList) {
                checkGroupDao.AddCheckGroupIdAndCheckitemIdByCheckGroupById(integerId, checkGroupId);
            }
        }

    }
}
